<html>
<head>
<link rel="stylesheet" href="../../js/sh/SyntaxHighlighter.css" type="text/css" />
<script src="../../js/sh/shCore.js"></script>
<script src="../../js/sh/shBrushJava.js"></script>
<style>

* {
font-family:Courier New,monospace;
  padding: 0;
  margin: 0;
  white-space: nowrap;
  font-size: 11px;
}

.dp-highlighter {
  white-space: nowrap;
  overflow: visible;
  width: 750px;
  font-size: 11px;
  font-family:Courier New,monospace;
}
</style>
</head>
<body>
<textarea name="code" class="java:nogutter:nocontrols" rows="15" cols="120">
/*
 * GWT-Ext Widget Library
 * Copyright 2007 - 2008, GWT-Ext LLC., and individual contributors as indicated
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
 

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
import com.gwtext.client.core.Connection;
import com.gwtext.client.data.Node;
import com.gwtext.client.dd.DragData;
import com.gwtext.client.dd.DragDrop;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.form.FieldSet;
import com.gwtext.client.widgets.form.FormPanel;
import com.gwtext.client.widgets.form.Radio;
import com.gwtext.client.widgets.layout.HorizontalLayout;
import com.gwtext.client.widgets.layout.VerticalLayout;
import com.gwtext.client.widgets.tree.*;
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;

public class TwoTreesSample implements EntryPoint {

    public void onModuleLoad() {
        Panel panel = new Panel();
        panel.setBorder(false);
        panel.setPaddings(15);

        //create form for nody drop style
        FormPanel formPanel = new FormPanel();
        formPanel.setBorder(false);
        formPanel.setHideLabels(true);

        FieldSet fieldSet = new FieldSet("Drop style");
        fieldSet.setWidth(420);
        formPanel.add(fieldSet);

        final Radio moveRadio = new Radio();
        moveRadio.setName("dropstyle");
        moveRadio.setBoxLabel("Move");
        moveRadio.setChecked(true);
        fieldSet.add(moveRadio);

        final Radio copyRadio = new Radio();
        copyRadio.setName("dropstyle");
        copyRadio.setBoxLabel("Copy");
        fieldSet.add(copyRadio);

        //create source countries tree
        final TreePanel treePanel = new TreePanel();
        treePanel.setTitle("Countries");
        treePanel.setAnimate(true);
        treePanel.setEnableDD(true);
        treePanel.setContainerScroll(true);
        treePanel.setRootVisible(true);
        treePanel.setWidth(200);
        treePanel.setHeight(400);
        treePanel.setSelectionModel(new MultiSelectionModel());

        final XMLTreeLoader loader = new XMLTreeLoader();
        loader.setDataUrl("data/countries-grouped.xml");
        loader.setMethod(Connection.GET);
        loader.setRootTag("countries");
        loader.setFolderTitleMapping("@title");
        loader.setFolderTag("continent");
        loader.setLeafTitleMapping("@title");
        loader.setLeafTag("country");
        loader.setQtipMapping("@qtip");
        loader.setIconMapping("@icon");

        AsyncTreeNode root = new AsyncTreeNode("Countries", loader);
        treePanel.setRootNode(root);
        root.expand();
        treePanel.expandAll();

        //create target vacation tree
        final TreePanel tripTreePanel = new TreePanel();
        tripTreePanel.setTitle("Trip Planner");
        tripTreePanel.setAnimate(true);
        tripTreePanel.setEnableDD(true);
        tripTreePanel.setContainerScroll(true);
        tripTreePanel.setRootVisible(true);
        tripTreePanel.setWidth(200);
        tripTreePanel.setHeight(400);

        final XMLTreeLoader tripLoader = new XMLTreeLoader();
        tripLoader.setDataUrl("data/trip.xml");
        tripLoader.setMethod(Connection.GET);
        tripLoader.setRootTag("vacations");
        tripLoader.setFolderIdMapping("@title");
        tripLoader.setFolderTag("trip");
        tripLoader.setQtipMapping("@qtip");
        tripLoader.setIconMapping("@icon");
        tripLoader.setAttributeMappings(new String[]{"@trip"});

        final AsyncTreeNode tripRoot = new AsyncTreeNode("Places to Visit", tripLoader);

        tripTreePanel.setRootNode(tripRoot);

        //add trip tree listener that handles move / copy logic
        tripTreePanel.addListener(new TreePanelListenerAdapter() {
            public void onRender(Component component) {
                tripRoot.expand();
                tripTreePanel.expandAll();
            }

            public boolean doBeforeNodeDrop(TreePanel treePanel, TreeNode target, DragData dragData,
                                            String point, DragDrop source, TreeNode dropNode,
                                            DropNodeCallback dropDropNodeCallback) {
                if ("true".equals(target.getAttribute("trip"))) {
                    if (copyRadio.getValue()) {
                        TreeNode copyNode = dropNode.cloneNode();
                        Node[] children = copyNode.getChildNodes();
                        for (int i = 0; i < children.length; i++) {
                            Node child = children[i];
                            copyNode.removeChild(child);
                        }
                        dropDropNodeCallback.setDropNode(copyNode);
                    }
                }
                return true;
            }
        });

        Panel horizontalPanel = new Panel();
        horizontalPanel.setLayout(new HorizontalLayout(20));
        horizontalPanel.add(treePanel);
        horizontalPanel.add(tripTreePanel);

        Panel verticalPanel = new Panel();
        verticalPanel.setLayout(new VerticalLayout(15));

        verticalPanel.add(formPanel);
        verticalPanel.add(horizontalPanel);

        panel.add(verticalPanel);

        RootPanel.get().add(panel);
    }
}
</textarea>
<script class="javascript">
dp.SyntaxHighlighter.HighlightAll('code');
</script>
</body>
</html>
